package com.tao.poly_.dynamic;

public class DynamicBinding {
    public static void main(String[] args) {
        //编译类型是A,运行类型是B
        A a = new B();
        System.out.println(a.sum());//40-->30
        System.out.println(a.sum1());//30-->20
    }
}

class A{
    public int i=10;
    //动态绑定机制：当调用对象方法时，该方法会和对象的运行类型绑定
    public int sum(){
        return getI()+10;//调用子类的getI()方法  20+10
    }
    public int sum1(){
        return i+10;
    }
    public int getI(){
        return i;
    }
}

class B extends A{
    public int i=20;

//    public int sum(){
//        return i+20;
//    }
    public int getI(){
        return i;
    }

//    public int sum1(){
//        return i+10;
//    }
}